﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NGI_Enumerador;

namespace NGI_Auxiliares
{
    public class Validacion
    {
        private Control _campo;
        private Control _etiqueta;
        private TiposValidaciones _validacion;
        private String _valorDefecto;

        private ArrayList _campos;
        private ArrayList _etiquetas;
        private Control _etiquetaAdicional;
        
        public TiposValidaciones TipoValidacion
        {
            get { return _validacion; }
            set { _validacion = value; }
        }

        public String ValorDefecto
        {
            get { return _valorDefecto; }
            set { _valorDefecto = value; }
        }

        public Control Etiqueta
        {
            get { return _etiqueta; }
            set { _etiqueta = value; }
        }


        public ArrayList Etiquetas
        {
            get { return _etiquetas; }
            set { _etiquetas = value; }
        }

        public Control Campo
        {
            get { return _campo; }
            set { _campo = value; }
        }

        public ArrayList Campos
        {
            get { return _campos; }
            set { _campos = value; }
        }

        public Control EtiquetaAdicional
        {
            get { return _etiquetaAdicional; }
            set { _etiquetaAdicional = value; }
        }

        public Validacion(Control Campo, Control Etiqueta, TiposValidaciones Validacion)
        {
            this._campo = Campo;
            this._etiqueta = Etiqueta;
            this._validacion = Validacion;
        }

        public Validacion(ArrayList Campos, ArrayList Etiquetas, Control EtiquetaAdicional, TiposValidaciones Validacion)
        {
            this._campos = Campos;
            this._etiquetas = Etiquetas;
            this._etiquetaAdicional = EtiquetaAdicional;
            this._validacion = Validacion;
        }

        public Validacion(Control Campo, Control Etiqueta, TiposValidaciones Validacion, String ValorDefecto)
        {
            this._campo = Campo;
            this._etiqueta = Etiqueta;
            this._validacion = Validacion;
            this._valorDefecto = ValorDefecto;
        }

        public Validacion(Control Campo, TiposValidaciones Validacion)
        {
            this._campo = Campo;
            this._validacion = Validacion;
        }

        public static Validacion NuevaValidacion(ArrayList Campos, ArrayList Etiquetas, Control EtiquetaAdicional, TiposValidaciones Validacion)
        {
            return new Validacion(Campos, Etiquetas, EtiquetaAdicional, Validacion);
        }

        public static Validacion NuevaValidacion(Control Campo, Control Etiqueta, TiposValidaciones Validacion)
        {
            return new Validacion(Campo, Etiqueta, Validacion);
        }

        public static Validacion NuevaValidacion(Control Campo, TiposValidaciones Validacion)
        {
            return new Validacion(Campo, Validacion);
        }

        public static Validacion NuevaValidacion(Control Campo, Control Etiqueta, TiposValidaciones Validacion, String ValorDefecto)
        {
            return new Validacion(Campo, Etiqueta, Validacion, ValorDefecto);
        }

        public Boolean EsValido()
        {
            switch (this._validacion)
            {
                case TiposValidaciones.Requerido:
                    if (this._campo is TextBox)
                        return ((TextBox)this._campo).Text.Trim().Length > 0;
                    else if (this._campo is MaskedTextBox)
                        return ((MaskedTextBox)this._campo).Text.Trim().Length > 0 && !((MaskedTextBox)this._campo).Text.Trim().Equals(this.ValorDefecto);
                    break;
                case TiposValidaciones.Iguales:
                    Boolean Iguales = false;
                    if (this._campos != null)
                    {
                        String Texto = ((TextBox)this._campos[0]).Text;
                        foreach (Control Campo in this._campos)
                        {
                            Iguales = ((TextBox)Campo).Text.Length > 0 ? Texto.Equals(((TextBox)Campo).Text) : false;
                        }
                    }

                    return Iguales;
            }

            return true;
        }

    }
}
